﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpLearning.syntaxBasics
{
    /**
     * C# 委托的核心本质是：一个强类型的、安全的、可以引用方法的对象。​
     *事件驱动或回调驱动的代码，比如GUI开发、异步任务处理或观察者模式实现
     *委托和事件是类型安全的回调机制，核心是类型化的函数指针和内置的发布-订阅模式
     */
    internal class DelegateDemo
    {
        // 正确声明委托
        delegate void MyDelegate(string message);
 
        
        public static void execDelegate()
        {
            string message = "Hello World";

            // 1. 方法1：使用方法作为委托参数
            MyDelegate del1 = ShowMessage;
            del1(message); // 正确调用

            // 2. 方法2：使用Lambda表达式
            MyDelegate del2 = (msg) =>
            {
                Console.WriteLine($"Lambda: {msg}");
            };
            del2(message);

            // 3. 方法3：使用匿名方法
            MyDelegate del3 = delegate (string msg)
            {
                Console.WriteLine($"Anonymous: {msg}");
            };
            del3(message);

 
        }

        // 委托要调用的方法
        static void ShowMessage(string message)
        {
            Console.WriteLine($"Method: {message}");
        }


    }
}
